package com.study.modules.designPatterns.No07AdapterMode;

/**
 * 适配器模式
 * 适配器模式（Adapter Pattern）：将一个类的接口转换成客户希望的另外一个接口，使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
 * 这种类型的设计模式属于结构型模式，它结合了两个主要的设计模式：类的适配器和对象适配器。
 * 类适配器模式属于类结构型模式，它通过继承一个已有的类来改变其父类的接口。这种类型的设计模式属于结构性模式，它结合了两个主要的设计模式：类的适配器和对象适配器。
 * 对象适配器模式属于对象结构型模式，它通过创建一个包装对象来包装原有的类，并将其转换成客户希望的另外一个接口。这种类型的设计模式属于结构性模式，它结合了两个主要的设计模式：类的适配器和对象适配器。
 * 主要解决：主要解决在软件系统中，常常要将一些"现存的对象"放到新的环境中，而新环境要求的接口是现对象不能满足的。
 * 何时使用：
 * 1.需要将一个类转换成另一个不兼容的类，使得该类可以一起工作。
 * 2.设计一个可以重复使用的类，用于与一些彼此之间没有太大关联的一些类，这些源类不一定有共同的接口。
 * 3.通过接口转换，将一个类插入另一个类系中。（比如，将一个类插入另一个类的子类中，或者将一个对象转换成一个新的类）
 * 何时不使用：
 * 1.使用环境类转换，接口不兼容。
 * 2.没有必要使用继承。
 * 使用场景：
 * 1.需要将一个类转换成另一个不兼容的类，使得该类可以一起工作。
 * 2.需要在现有的类中进行扩展，但是该类不能修改。
 * 3.通过接口转换，将一个类插入另一个类系中。
 * 注意事项：
 * 1.适配器模式可以将一个类的接口转换成客户希望的另外一个接口，使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
 * 2.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作，其关键是要理解现有接口的限制，然后设计一个符合接口要求的适配器类，让原有接口不发生变化，适配器类可以适配新的接口。
 * 3.适配器模式比生成子类方便，因为子类继承父类，耦合度高，如果父类接口不符合需要，那么子类就不符合需要。
 * 4.如果一个适配器类不适合某个接口，那么适配器类可以作为一个适配者，通过组合的方式来扩展适配器的功能。
 * 5.适配器模式可以与其他模式一起使用，如，当要使用一个已经存在的类，而它的接口不符合要求时，可以考虑使用适配器模式.
 * 6.一个对象适配器可以把一个类的接口转换成客户希望的另外一个接口。此外，还可以把一个对象包装成一个适配器，从而从类的接口转换成客户希望的另外一个接口。
 * 7.适配器模式可以用于任何需要复用现有类，而又有其他限制条件的情况，比如，需要使用一个已经存在的类，但是它不符合接口的规范。
 * 8.通过使用适配器模式，可以将一个类的接口转换成客户希望的另外一个接口。从而使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
 * 9.在java中，如果要将一个类转换成另一个类，则需要编写一个转换类，实现目标接口或继承目标类。
 */
public class TestAdapterMode {
    public static void main(String[] args) {
        Printer printer = new Printer();
        ComputerAdapter computerAdapter = new ComputerAdapter(printer);
        computerAdapter.print();
    }
}
